<?php

Yii::import('application.modules.ninio.models._base.BaseNiniosInfoCartasemanal');

/**
 * Modelo heredado (BaseInfoCartaSemanal)
 */
class NiniosInfoCartasemanal extends BaseNiniosInfoCartasemanal {

    public $nombre;
    public $dia;
    public $tiempo_comida;

    /**
     * Recupera el nombre del modelo
     * @return NiniosInfoCartasemanal
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * Pluraliza el nombre del modelo segun el  $n
     * @param int $n
     * @return string
     */
    public static function label($n = 1) {
        return Yii::t('app', 'Asignaci&oacute;n de men&uacute;|Asignaci&oacute;n de men&uacute;s', $n);
    }

    /**
     * Proporciona las relaciones combinadas para el DAO con el mismo método proveniente del BASEMODEL
     * @return array
     */
    public function relations() {
        return array(
            'infantes' => array(self::BELONGS_TO, 'Ninios', 'ninios_id'),
            'infoCartaSemanals' => array(self::BELONGS_TO, 'InfoCartaSemanal', 'info_carta_semanal_id'),
        );
    }

    /**
     * 
     * @return type
     */
    public function scopes() {
        return array(
            'ordenPorNombre' => array(
                'order' => 't. asc',
            ),
        );
    }

    /**
     * Consulta Sql que permite obtener las porciones de los alimentos asi como 
     * sus valores nutricionales para un dia de la semana
      * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param type $diaSemana
     * @param type $idInfoCartaSemanal
     * @return null
     */
    public function consulta($diaSemana, $idInfoCartaSemanal) {
        $data = array();
        $command = Yii::app()->db->createCommand()
                ->select('cs.cantidad as cantidad, al.nombre as alimento, vn.* ')
                ->from('carta_semanal cs')
                ->leftJoin("carta_alimentos ca", "ca.carta_alimentos_id=carta_aliemtnos.id")
                ->leftJoin("alimentos al", "ca.alimentos_id=al.id")
                ->leftJoin("valores_nutricionales vn", "al.id=vn.alimentos_id")
                ->where("cs.info_carta_semanal_id=:idInfoCartaSemanal", array(":idInfoCartaSemanal" => $idInfoCartaSemanal))
                ->andWhere("cs.dia_semana :diaSemana and :fin", array(":diaSemana" => $diaSemana));
        return $command->queryAll();
    }

    /**
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * function que va guardando los ninos que se asignaron al infoCartaSemanal
     * @param int $id del infoCartaSemanal 
     * @param array $datos contiene todos los ninios seleccionados
     * @return boolen si guardo o no el modelo 
     */
    public function guardarAjax($id, $datos) {
        $guardo = false;
        $infoCS = InfoCartaSemanal::model()->findByPk((int) $id);
        foreach ($datos as $value) {
            $model = new NiniosInfoCartasemanal;
            $model->info_carta_semanal_id = $id;
            $model->ninios_id = $value;
            $model->observaciones = " ";
            $guardo = $model->save();
        }
        return $guardo;
    }

    public static function representingColumn() {
        return 'nombre';
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => Yii::t('app', 'ID'),
            'ninios_id' => Yii::t('app', 'Ninios'),
            'info_carta_semanal_id' => Yii::t('app', 'Info Carta Semanal'),
            'fecha_inicio' => Yii::t('app', 'Fecha Inicio'),
            'fecha_fin' => Yii::t('app', 'Fecha Fin'),
            'nombre' => Yii::t('app', 'Menu Semanal'),
            'dia' => Yii::t('app', 'Dia de la semana'),
        );
    }

    public function searchColumns() {
        return array(
            'ninios_id:text',
            'observaciones:text',
            'info_carta_semanal_id:text',
        );
    }

    public function search(array $columns = null) {
        $criteria = new CDbCriteria;
        $sort = new CSort;
        $criteria->with = array('infantes', 'infoCartaSemanals');
        $criteria->join = "INNER JOIN ninios on ninios.id = t.ninios_id ";
        $criteria->join .= "LEFT JOIN info_carta_semanal on info_carta_semanal.id = t.info_carta_semanal_id";

        if (isset($_GET['sSearch'])) {
            $criteria->compare('infantes.nombres', $_GET['sSearch'], true, 'OR');
            $criteria->compare('infantes.apellidos', $_GET['sSearch'], true, 'OR');
            $criteria->compare('infoCartaSemanals.entidad_ejecutora', $_GET['sSearch'], true, 'OR');
            $criteria->compare('infoCartaSemanals.responsable', $_GET['sSearch'], true, 'OR');
            $criteria->compare('infoCartaSemanals.fecha_inicial', $_GET['sSearch'], true, 'OR');
            $criteria->compare('infoCartaSemanals.fecha_fin', $_GET['sSearch'], true, 'OR');
            $criteria->compare('infoCartaSemanals.nombre_CIBV', $_GET['sSearch'], true, 'OR');
        }

        $criteria->compare('infantes.nombres', $this->ninios_id, true, 'OR');
        $criteria->compare('infantes.apellidos', $this->ninios_id, true, 'OR');
        $criteria->compare('infoCartaSemanals.entidad_ejecutora', $this->info_carta_semanal_id, true, 'OR');
        $criteria->compare('infoCartaSemanals.responsable', $this->info_carta_semanal_id, true, 'OR');
        $criteria->compare('infoCartaSemanals.fecha_inicial', $this->info_carta_semanal_id, true, 'OR');
        $criteria->compare('infoCartaSemanals.fecha_fin', $this->info_carta_semanal_id, true, 'OR');
        $criteria->compare('infoCartaSemanals.nombre_CIBV', $this->info_carta_semanal_id, true, 'OR');

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => new EDTSort(__CLASS__, $columns),
            'pagination' => new EDTPagination,
        ));
    }

    /**
     * Busca si la tabla del modelo no esta vacia
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return query
     */
    public function contarDatos() {
        $command = Yii::app()->db->createCommand()
                ->select("count(id) as total")
                ->from($this->tableName());
        $result = $command->queryAll();
        return $result[0]['total'];
    }

    /**
     * Busca los datos antropomorficos de los niños pertenecientes a una institucion
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $da_id id del dato antropomorfico
     * @return \DatosAntropomorficos
     */
    public function de_institucion($ni_id = null) {
        $modelCruge = InstitucionCrugeUser::model()->de_usuario()->findAll();
        $this->getDbCriteria()->mergeWith(
                array(
                    'join' => 'LEFT JOIN ninios ni ON ni.id = t.ninios_id',
                    'condition' => 'ni.institucion_id=:institucion_id',
                    'params' => array(':institucion_id' => $modelCruge[0]['oldValues']['institucion_id'],
                    )
                )
        );
        if ($ni_id != null) {
            $this->getDbCriteria()->mergeWith(
                    array(
                        'condition' => 't.id=:ni_id',
                        'params' => array(':ni_id' => $ni_id,
                        )
                    )
            );
        }

        return $this;
    }

    /**
     * Cuenta la cantidad de alimentos de un menu semanal
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @param int $id_ninios_info_carta_semanal del NiniosInfoCartaSemanal
     * @return count de la consulta
     */
    public function menu_semanal_completo($id_ninios_info_carta_semanal) {
        $model = $this->findByPk((int) $id_ninios_info_carta_semanal);
        $criteria = new CDbCriteria;
        $criteria->select = ' count(a.id)';
        $criteria->join = 'LEFT JOIN carta_semanal ca ON ca.info_carta_semanal_id = :info_carta_semanal_id ';
        $criteria->join .= 'LEFT JOIN carta_alimentos a ON ca.carta_alimentos_id = a.id';
        $criteria->condition = 'a.id IS NOT NULL';
        $criteria->group = 'a.id';
        $criteria->params = array(':info_carta_semanal_id' => $model->info_carta_semanal_id);

        $result = new CActiveDataProvider($this, array(
            'criteria' => $criteria,));
        $resul2 = $result->getData();
        return count($resul2);
    }


    /**
     * Busca que el id seleccionado este o no asiganado
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * @param int $id del InfoCartaSemanal
     * @return boolean true si esta vacio y false si ya tiene datos
     */
    public function de_Menu_Semanal_id($id) {
        $command = Yii::app()->db->createCommand()
                ->select('* ')
                ->from($this->tableName())
                ->where("ninios_info_cartasemanal.info_carta_semanal_id=:idInfoCartaSemanal", array(":idInfoCartaSemanal" => $id));
       $result = $command->queryAll();
        if(empty($result)){
            return true;
        }else{
            return false;
        }
        
    }

}
